home *** CD-ROM | disk | FTP | other *** search
- opt o+,p+
-
- ; Assembler: DevPac v2.14
- ; IN: d0,d1 --> Faktor,Faktor
- ; OUT: d0,d1,d2 --> Faktor,Faktor,Produkt
-
- ; RETURN: d2 = 0 --> wenn bei LSL.L #1,D0 oder
- ; ADD.L D0,D2 ein Überlauf
- ; auftritt (Zahl wird größer
- ; als 2^32)
-
- move.l #356,d0
- move.l #98743,d1
-
- mul
- movem.l d0/d1,-(sp) ; Werte sichern
- moveq #0,d2 ; D2 löschen
- cmp.l d0,d1 ; größerer Wert in D0 stehen
- ble.s .mul_loop
- exg d0,d1
-
- .mul_loop
- lsl.l #1,d0 ; mit 2 multiplizieren
- bcs.s .overflow
- lsr.l #1,d1 ; durch 2 teilen
- btst #0,d1 ; Zahl gerade ?
- beq.s .even ; ja
- add.l d0,d2 ; nein -> addieren
- bcs.s .overflow
-
- .even
- cmp.l #1,d1 ; Fertig ??
- bne.s .mul_loop ; Nein -> weiter geht`s
- bra.s .mul_done
-
- .overflow
- moveq #0,d2
-
- .mul_done
- movem.l (sp)+,d0/d1 ; und tschüß...
- rts
-